home *** CD-ROM | disk | FTP | other *** search
/ AOL File Library: 2,401 to 2,500 / aol-file-protocol-4400-2401-to-2500.zip / AOLDLs / Telecom Utilities / TELNET_ V11.3 AnzioWin 16-Bit / ANZWD113.exe / RECV-PC.C < prev    next >
C/C++ Source or Header  |  1993-02-17  |  4KB  |  129 lines

  1. /* RECV-PC.C from RASMUSSEN SOFTWARE INC.
  2.    Version 1.0  11-21-89
  3.    Version 1.1  07-23-90 : We weren't always getting the 'end' indicator.
  4.    Version 1.2  04-21-92 : Use TCSETAW instead of TCSETA
  5.                            Improve error handling
  6.    Version 2.0  02-17-93 : Change terminating character, in order to work with
  7.                               ANZIO 9.7 and above
  8.                            Move line reconfiguration higher
  9.                            If no PC file name is given, use UNIX file name
  10.                            Use Hex 1C, 1D for ANZIO commands (will only work
  11.                               with ANZIO 9.7 and above)
  12. */
  13.  
  14. #include        <stdio.h>
  15. #include        <errno.h>
  16. #include        <fcntl.h>
  17. #include        <termio.h>
  18.  
  19. #define         DC2     0X12
  20. #define         DC4     0X14
  21. #define         BEL     0X07
  22. #define         MAX     8000
  23. #define         DONE    4
  24. #define         BADWRITE "ERROR ON WRITE IN UNIX"
  25. #define         TRUE    1
  26. #define         COMMAND_START  0X1C
  27. #define         COMMAND_END    0X1D
  28.  
  29. char            ch;
  30. char            bufr[MAX];
  31. int             i;
  32. int             result;
  33. struct termio   tt_save;
  34. struct termio   tt_work;
  35. long            bytecount;
  36. long            linecount;
  37. char            pcfilename[256];
  38.  
  39. void send_command(s)
  40. char *s;
  41. {
  42.    printf("%c%s%c\n", COMMAND_START, s, COMMAND_END);
  43. }
  44.  
  45. main(argc, argv)
  46.    int argc;
  47.    char *argv[];
  48. {
  49.    int outfile;
  50.  
  51.    printf("recv-pc Version 2.0 Copyright 1993 Robert Rasmussen\n");
  52.    if (argc < 2) {
  53.       printf("Format is: recv-pc <unixfilename> [<pcfilename>]\n\n");
  54.       exit(1);
  55.    }
  56.    outfile = open(argv[1],O_WRONLY | O_CREAT | O_TRUNC, 0666);
  57.    if (outfile == -1) {
  58.       printf("Can not open %s\n",argv[1]);
  59.       exit(1);
  60.    }
  61.    if (argc >= 3)
  62.       strcpy(pcfilename, argv[2]);
  63.    else
  64.       strcpy(pcfilename, argv[1]);
  65.    send_command("CLOSEI");
  66.    sprintf(bufr, "OPENI/S %s",pcfilename);
  67.    send_command(bufr);
  68.    ch = getchar(); /*leading zero*/
  69.    ch = getchar();
  70.    if (ch != '0') {
  71.       printf("Can't open PC file named %s\n", pcfilename);
  72.       exit(1);
  73.    }
  74.    ch = getchar();
  75.  
  76.    ioctl(0, TCGETA, &tt_save);
  77.    tt_work = tt_save;
  78.    tt_work.c_lflag &= ~ICANON; /* turn off icanon */
  79.    tt_work.c_iflag |= IXOFF;   /* turn on XON/XOFF */
  80.    tt_work.c_cc[4] = 4;        /* 1.01 */
  81.    tt_work.c_cc[5] = 2;        /* 1.01 */
  82.    ioctl(0, TCSETAW, &tt_work);
  83.  
  84.    sprintf(bufr, "TRANSMIT TRAILER %c", DONE);
  85.    send_command(bufr);
  86.  
  87.    i = 0;
  88.    linecount = 0;
  89.    bytecount = 0;
  90.    while (TRUE) {
  91.       ch = getchar();
  92.       if (ch == DONE) {
  93.          putchar(BEL);
  94.          if (i != (result = write(outfile, bufr, i))) {
  95.             if (result == -1) {
  96.                if (errno == EBADF)
  97.                   printf("EBADF");
  98.                else if (errno == ENOSPC)
  99.                   printf("ENOSPC");
  100.             } else
  101.                printf(BADWRITE);
  102.             ioctl(0, TCSETAW, &tt_save);
  103.             send_command("transmit off");
  104.             exit(1);
  105.          }
  106.          close(outfile);
  107.          ioctl(0, TCSETAW, &tt_save);
  108.          printf("Lines: %d  Bytes: %d\n", linecount, bytecount);
  109.          exit(0);
  110.       }
  111.       if (ch == '\n')
  112.          linecount++;
  113.       bytecount++;
  114.       bufr[i++] = ch;
  115.       if (i >= MAX) {
  116.          if (MAX != write(outfile, bufr, MAX)) {
  117.             printf(BADWRITE);
  118.             ioctl(0, TCSETAW, &tt_save);
  119.             send_command("transmit off");
  120.             exit(1);
  121.          }
  122.          i = 0;
  123.       }
  124.    }
  125. }
  126.  
  127.  
  128.  
  129.